// const baseUrl = 'http://192.168.2.60:9800/rzzxmobile'; // 后端的主机名 + 端口号
import {
	rez_path
} from "@/common/js/warehouse.js"

// 带 Token 请求
const httpTokenRequest = (opts) => {
	const app = getApp();
	let httpDefaultOpts = {
		url: rez_path + opts.url,
		data: opts.data,
		method: opts.method || 'GET',
		header: {
			"Content-Type": "application/x-www-form-urlencoded"
		},
		// dataType: 'json',
	}
	let promise = new Promise(function(resolve, reject) {

		uni.request(httpDefaultOpts).then(
			(e) => {
				let res = e[1]
				if (res.statusCode == 200) {

					let storeData = uni.getStorageSync('storeData')

					if (storeData != 'undefined' && storeData != null && storeData.length > 0) {

						var flag = false


						storeData.forEach((k, j) => {
							if (k.url == opts.url && looseEqual(k.params, opts.data)) {

								k.data = res
								flag = true

							}
						})
						if (!flag) {
							let item = {}
							item.url = opts.url
							item.data = res
							item.params = opts.data
							storeData.push(item)

						}

					} else {
						storeData = []
						let item = {}
						item.url = opts.url
						item.data = res
						item.params = opts.data

						storeData.push(item)
					}


					uni.setStorageSync('storeData', storeData)

					resolve(res)


				} else {

					console.log(opts)
					console.log("请求错误信息", res.data.message);
					app.$global.done_flag = false
					if (res.data.message != undefined) {
						uni.showToast({
							icon: 'none',
							title: res.data.message,
							duration: 3000
						})
					} else {
						resolve('缓存成功')
					}
					return Promise.reject(res.data.message);

				}


			}
		).catch(
			(response) => {
				reject(response)
			}
		)
	})
	return promise
}








// 去重
function deWeight(arr) {
	for (var i = 0; i < arr.length - 1; i++) {
		for (var j = i + 1; j < arr.length; j++) {
			if (arr[i].ID == arr[j].ID) {
				arr.splice(j, 1);
				//因为数组长度减小1，所以直接 j++ 会漏掉一个元素，所以要 j--
				j--;
			}
		}
	}
	return arr;
}

// 找相同formdata数据
//判断两个对象是否相同（包含绝对相等和他们是否有相同的形状）
function looseEqual(a, b) {
	if (a === b) { //如果是绝对相等就直接返回true
		return true;
	}
	//如果不是绝对相等就哦按的他们是否有相同的形状
	var isObjectA = isObject(a);
	var isObjectB = isObject(b);
	if (isObjectA && isObjectB) { //两个均是对象
		try {
			var isArrayA = Array.isArray(a);
			var isArrayB = Array.isArray(b);
			if (isArrayA && isArrayB) { //如果都是数组
				if (a.length === b.length) { //如果长度相等
					return a.every(function(e, i) { //用every和递归来比对a数组和b数组的每个元素，并返回
						return looseEqual(e, b[i])
					})
				}
				//长度都不等直接返回false
				return false;
			} else if (a instanceof Date && b instanceof Date) { //如果是Date 则直接getTime 比较
				return a.getTime() === b.getTime()
			} else if (!isArrayA && !isArrayB) { //对象的比较
				//拿到两个对象的key
				var keysA = Object.keys(a);
				var keysB = Object.keys(b);
				if (keysA.length === keysB.length) { //如果keys相等
					return keysA.every(function(key) { //用every和递归来比对a对象和b对象的每个元素值，并返回
						return looseEqual(a[key], b[key]);
					})
				}
				//长度都不等直接返回false
				return false;
			} else {
				return false
			}
		} catch (e) {
			return false
		}
	} else if (!isObjectA && !isObjectB) { //如果都不是对象则按String来处理
		return String(a) === String(b)
	} else {
		return false
	}
}

function isObject(obj) {
	return obj !== null && typeof obj === 'object'
}

// formdata转json

function changeStyle(obj) {
	var objData = {}
	obj.forEach(function(curValue, index, arr) {
		objData[index] = curValue;
	});
	return objData
}





// 导出去
export default httpTokenRequest;